"use strict";
// 作业：
//   定义一个图形接口IShape，声明两个方法，getArea():number和getPer():number。
//   定义矩形类，使用长和宽构造矩形，并实现IShape接口
//   定义三角形类，使用三条边构造三角形（选做：构造时如果三条边不能构造出三角形，抛出异常），并实现IShape接口
//   定义圆形类，使用半径构造圆形，并实现IShape接口
class Rectangle {
    constructor(width, height) {
        this.width = width;
        this.height = height;
    }
    getArea() {
        return this.width * this.height;
    }
    getPer() {
        return 2 * (this.width + this.height);
    }
}
class Triangle {
    constructor(a, b, c) {
        if (a + b < c
            || b + c < a
            || a + c < b) {
            throw new Error("三角形两边之和大于第三边");
        }
        this.a = a;
        this.b = b;
        this.c = c;
    }
    getArea() {
        let p = this.getPer() / 2;
        let r = (p - this.a) * (p - this.b) * (p - this.c) * p;
        return Math.pow(r, 0.5);
    }
    getPer() {
        return this.a + this.b + this.c;
    }
}
class Circle {
    constructor(r) {
        this.r = r;
    }
    getArea() {
        return this.r * this.r * Math.PI;
    }
    getPer() {
        return 2 * this.r * Math.PI;
    }
}
let array = [];
array.push(new Rectangle(10, 20));
array.push(new Triangle(3, 4, 5));
array.push(new Circle(10));
// 定义一个方法，传入图形接口数组，返回二位长的元组，元组第一位为图形的面积和，第二位为图形的周长和
function getIShape(array) {
    let r = [0, 0];
    array.forEach(v => {
        r[0] += v.getArea();
        r[1] += v.getPer();
    });
    return r;
}
let r = getIShape(array);
console.log(r);
